#pragma once

#include <memory>

#include "G4String.hh"
#include "G4UImessenger.hh"

class AtomNumFilter;
//class G4ScoringManager;

typedef std::vector<G4String> G4TokenVec;

class AtomNumFilterMsgr : public G4UImessenger
{
public:
    //AtomNumFilterMsgr(G4ScoringManager* SManager);
    //AtomNumFilterMsgr(AtomNumFilter* filter);
    AtomNumFilterMsgr(std::vector<AtomNumFilter*> filter_vec);
    virtual ~AtomNumFilterMsgr();

    void SetNewValue(G4UIcommand* command, G4String newValue) override;

    //G4int GetTargetZ() const { return _fTargetZ; }
    //G4int GetZmax() const { return _fZmax; }
    //G4String GetCat() const { return _fCat; }

    //AtomNumFilter* GetFilter() { return fFilter;}
    const std::vector<AtomNumFilter*>& GetFilterVec() { return _fFilter_vec; }

protected:
    void FillTokenVec(G4String newValues, G4TokenVec& token);

private:
    //AtomNumFilter* fFilter;
    std::vector<AtomNumFilter*> _fFilter_vec;
    //G4ScoringManager* fSMan;
    //G4int _fTargetZ;
    //G4int _fZmax;
    //G4String _fCat;

    std::unique_ptr<G4UIdirectory> _fFilterDir;
    std::unique_ptr<G4UIcommand> _fCmdCreateFilter;
    //class G4UIcmdWithAnInteger* fCmdSetTargetZ;
    //class G4UIcmdWithAnInteger* fCmdSetZmax;
    //class G4UIcmdWithAString* fCmdSetCat;
};
